/**
 * PDF报告文件URL处理工具
 * 用于处理PDF报告文件的URL转换和代理配置
 */

// 检查是否是开发环境
const isDevelopment = () => {
	// 兼容Node.js和浏览器环境
	if (typeof process !== "undefined" && process.env) {
		return process.env.NODE_ENV === "development";
	}
	// 浏览器环境，默认返回false（生产模式）
	return false;
};

// PDF报告服务器配置
const PDF_SERVER_CONFIG = {
	// 网闸IP地址（生产环境使用）
	gatewayUrl: "http://192.168.16.250:8099",
	proxyPrefix: "/api",
	staticPath: "/static/upload/report"
};

/**
 * 检查URL是否是PDF报告文件
 * @param {string} url - 要检查的URL
 * @returns {boolean} 是否是PDF报告文件
 */
export function isPdfReportUrl(url) {
	if (!url) return false;

	// 检查是否包含PDF报告文件的特征路径
	const pdfPatterns = ["/static/upload/report/", "/report/", ".pdf"];

	return pdfPatterns.some(pattern => url.includes(pattern));
}

/**
 * 将PDF报告文件URL转换为代理URL
 * @param {string} url - 原始PDF报告URL
 * @returns {string} 转换后的URL
 */
export function convertPdfToProxyUrl(url) {
	if (!url) return url;

	// 如果URL已经是相对路径，直接返回
	if (url.startsWith("/") || !url.startsWith("http")) {
		return url;
	}

	// 检查是否是PDF报告文件
	if (!isPdfReportUrl(url)) {
		return url;
	}

	// 开发模式下不进行IP转换
	if (isDevelopment()) {
		return url;
	}

	const { gatewayUrl, proxyPrefix, staticPath } = PDF_SERVER_CONFIG;

	// 生产模式下：将前置机返回的内网IP转换为网闸IP
	let convertedUrl = url;

	// 替换前置机内网IP为网闸IP
	const internalPatterns = [
		"http://218.89.149.125:8089",
		"http://218.89.149.125",
		"http://192.168.0.8:8099",
		"http://192.168.0.8",
		"http://192.168.16.250:8099",
		"http://192.168.16.250",
		"http://10.168.128.101:8099",
		"http://10.168.128.101"
	];

	for (const pattern of internalPatterns) {
		if (url.startsWith(pattern)) {
			convertedUrl = url.replace(pattern, gatewayUrl);
			break;
		}
	}

	// 如果URL已经是网闸地址，转换为代理路径
	if (convertedUrl.startsWith(gatewayUrl)) {
		// 提取相对路径
		const relativePath = convertedUrl.substring(gatewayUrl.length);
		return `${proxyPrefix}${relativePath}`;
	}

	// 其他情况直接返回原URL
	return url;
}

/**
 * 处理PDF报告文件URL，确保使用正确的格式
 * @param {string} url - 原始URL
 * @returns {string} 处理后的PDF URL
 */
export function processPdfUrl(url) {
	return convertPdfToProxyUrl(url);
}

/**
 * 批量处理PDF报告文件URL列表
 * @param {Array} urls - URL列表
 * @returns {Array} 处理后的URL列表
 */
export function processPdfUrls(urls) {
	if (!Array.isArray(urls)) return [];

	return urls.map(url => processPdfUrl(url));
}

/**
 * 通用URL处理器，自动识别并处理DICOM和PDF文件
 * @param {string} url - 原始URL
 * @returns {string} 处理后的URL
 */
export async function processUniversalUrl(url) {
	if (!url) return url;

	// 检查是否是PDF报告文件
	if (isPdfReportUrl(url)) {
		return processPdfUrl(url);
	}

	// 默认使用DICOM URL处理器
	const { processDicomUrl } = await import("./dicomUrlHandler.js");
	return processDicomUrl(url);
}

export default {
	isPdfReportUrl,
	convertPdfToProxyUrl,
	processPdfUrl,
	processPdfUrls,
	processUniversalUrl
};
